package com.example.demo;

import com.example.demo.entity.UserInfo;
import com.example.demo.listener.MyEvent;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.annotation.EnableAsync;
import springfox.documentation.oas.annotations.EnableOpenApi;

import javax.servlet.ServletContext;

/**
 * @author LiuFei
 */
@SpringBootApplication
@MapperScan(basePackages = {"com.example.demo.mapper"})
@EnableOpenApi
@EnableAsync//启用异步注解
public class DemoApplication {

    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(DemoApplication.class, args);
        // 创建一个事件 构造器中的object 是发生这个事件的对象 你想随便填也行

        MyEvent event = new MyEvent(UserInfo.class, setEvent());

        // 获取 application 域对象，将查到的信息放到 application 域中
        ServletContext application = context.getBean(ServletContext.class);
        application.setAttribute("user-info2", setEvent());

        // 发布一个事件 ApplicationContext 是一个容器bean 可以再其它地方拿到 用它发布事件即可
        /*通过 ApplicationContext 对象手动发布 MyEvent 事件，这样我们自定义的监听器就能监听到，然后处理监听器中写好的业务逻辑*/
        context.publishEvent(event);
    }

    private static UserInfo setEvent(){
        UserInfo user = UserInfo.builder()
                .age(18)
                .idCard("123456789987654321")
                .mobile("15988889999")
                .nativePlace("陕西省西安市雁塔区清华科技园")
                .sex("1")
                .useName("韩信")
                .useNo("10002")
                .build();
        return user;
    }

}
